[2024年8月新機能]UNDROPコマンド時にデータベース・スキーマ・テーブルのオブジェクトIDを指定できるようになりました

[2024年8月新機能]UNDROPコマンド時にデータベース・スキーマ・テーブルのオブジェクトIDを指定できるようになりました

Clock Icon2024.08.30

さがらです。

2024年8月の新機能で、UNDROPコマンド時にデータベース・スキーマ・テーブルのオブジェクトIDを指定できるようになりました。

https://docs.snowflake.com/release-notes/2024/8_30#undrop-command-support-for-restoring-objects-using-id

このコマンドにより、例えばあるテーブルを削除したあと同じ名称のテーブルを作成してしまったとき、最初のテーブルのUNDROPによる復元がより楽になりました。

実際にどのように変化したのか、本記事でまとめてみます。

従来のプロセス

まず、下記のSQLを実行してテーブルを作成しDROPしたあとに、全く同じ名称でテーブルを作成してDROPします。

-- 後々復元したいテーブルを作成し、削除
create table aaa as
    select
        1 as col1,
        2 as col2,
        3 as col3;

select * from aaa;

drop table aaa;

-- 全く同じテーブル名で、値を変更して作成して削除
create table aaa as
    select
        11 as col1,
        22 as col2,
        33 as col3;

select * from aaa;

drop table aaa;

このあと、一番最初に作成したテーブルを復元するには、一度UNDROPをした後に2番目に作成したテーブルを一度RENAMEした上で再度UNDROPコマンドを打つ必要がありました。これが従来のプロセスです。

-- 一度aaaをundropすると、一番直近で削除した方が復元されてしまうため、RENAMEする
undrop table aaa;

alter table aaa rename to aaa_latest;

-- もう一度、aaaをundropする
undrop table aaa;

-- 無事に、一番最初のaaaテーブルがクエリできる
select * from aaa;

2024-08-30_07h48_52

新機能を用いたプロセス

では、2024年8月にリリースされた新機能を使ったプロセスがどうなるのかまとめてみます。

-- 後々復元したいテーブルを作成し、削除
create table bbb as
    select
        1 as col1,
        2 as col2,
        3 as col3;

select * from bbb;

drop table bbb;

-- 全く同じテーブル名で、値を変更して作成して削除
create table bbb as
    select
        11 as col1,
        22 as col2,
        33 as col3;

select * from bbb;

drop table bbb;

このあと、対象のテーブルについて、account_usage.tablesでテーブルIDを確認します。

注意点としては、information_schema.tablesにはtable_id列が存在しないため、account_usage.tablesを必ず見る必要があるということです。そしてaccount_usage内のビューのため、即時に更新されるわけではありません。(ドキュメント上は更新まで最大90分かかると記載がありました)

-- bbbのテーブルIDを確認
select table_id,
  table_name,
  table_schema,
  table_catalog,
  created,
  deleted,
  comment
from snowflake.account_usage.tables
where 
table_name = 'BBB'
and deleted is not NULL
order by deleted;

2024-08-30_09h40_05

この上で、確認したテーブルIDを元に下記のUNDROPコマンドを実行します。すると、最初にDROPした方のテーブルが無事に復元されました!

-- IDを指定して、undropする
undrop table identifier(4207663);

-- 無事に、一番最初のbbbテーブルがクエリできる
select * from bbb;

2024-08-30_09h40_49

最後に

2024年8月の新機能で、UNDROPコマンド時にデータベース・スキーマ・テーブルのオブジェクトIDを指定できるようになりましたので、同名のテーブルが複数あった場合の復元プロセスがどのように改善できたかを本記事でまとめてみました。

いざというときに役立つと思うので、参考になると嬉しいです!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.